/**
 * La classe Personne
 * @author Klelifa Sarah, Razavet Maël
 * @version 1.0
 */
package fr.eisti.ing1.projetgsiKlelifaRazavet.Objets;

//imports nécessaires

import java.util.LinkedList;
import java.util.List;

public class Personne implements Comparable<Personne>{

    //Déclaration des attributs
    private int idPersonne;
    private String nom;
    private String prenom;
    private Genre sexe;
    private String dateNaissance;
    private Statut statutSocial;
    private String image;
    private List<Personne> propositionAmi;
    private List<CentreInteret> centreInterets;
    private List<Parcours> parcours;
    private List<Adresse> adresses;



    /**
     * Constructeur initialisé
     * @param idPersonne
     * @param nom
     * @param prenom
     * @param sexe
     * @param dateNaissance
     * @param statutSocial
     * @param image
     * @param centreInterets
     * @param parcours
     * @param adresses
     */
    public Personne(int idPersonne, String nom, String prenom, Genre sexe, String dateNaissance, Statut statutSocial, String image,List<CentreInteret> centreInterets,List<Parcours> parcours,List<Adresse> adresses) {
        this.idPersonne = idPersonne;
        this.nom = nom;
        this.prenom = prenom;
        this.sexe = sexe;
        this.dateNaissance = dateNaissance;
        this.statutSocial = statutSocial;
        this.image = image;
        this.propositionAmi = new LinkedList<Personne>();
        this.adresses = adresses;
        this.centreInterets = centreInterets;
        this.parcours = parcours;
    }

        /**
     * Constructeur initialisé
     * @param idPersonne
     * @param nom
     * @param prenom
     * @param sexe
     * @param dateNaissance
     * @param statutSocial
     * @param image
     * @param centreInterets
     * @param parcours
     * @param adresses
     */
    public Personne(int idPersonne, String nom, String prenom, Genre sexe, String dateNaissance, Statut statutSocial,String image) {
        this.idPersonne = idPersonne;
        this.nom = nom;
        this.prenom = prenom;
        this.sexe = sexe;
        this.dateNaissance = dateNaissance;
        this.statutSocial = statutSocial;
        this.image = image;
        this.propositionAmi = new LinkedList<Personne>();
        this.adresses = new LinkedList<Adresse>();
        this.centreInterets = new LinkedList<CentreInteret>();
        this.parcours = new LinkedList<Parcours>();
    }

    /**
     * représentation textuelle d'une personne
     * @return la représentation textuelle
     */
    @Override
    public String toString() {
        return "id: " + idPersonne + " | nom: " + nom + " | prenom: " + prenom + " | sexe: " + sexe + " | dateNaissance: " + dateNaissance + " | statutSocial: " + statutSocial + " | image: " + image;
    }

    /**
     * récupérer la date de naissance
     * @return StringNaissance la date de naissance
     */
    public String getDateNaissance() {
        return this.dateNaissance;
    }

   

    /**
     * récupère l'id de la personne
     * @return idPersonne l'id de la personne
     */
    public int getIdPersonne() {
        return this.idPersonne;
    }

  
    /**
     * récupère l'image de la personne
     * @return image l'image de la personne
     */
    public String getImage() {
        return this.image;
    }

   

    /**
     * récupère le nom de la personne
     * @return nom le nom de la personne
     */
    public String getNom() {
        return this.nom;
    }

    /**
     * récupère le prénom de la personne
     * @return prenom le prenom de la personne
     */
    public String getPrenom() {
        return this.prenom;
    }

    /**
     * récupère le sexe de la personne
     * @return sexe le sexe de la personne
     */
    public Genre getSexe() {
        return this.sexe;
    }

    /**
     * récupère le statut social de la personne
     * @return statutSocial le statut social de la personne
     */
    public Statut getStatutSocial() {
        return this.statutSocial;
    }

    /**
     * recupère la liste des amis proposé
     * @return la liste des amis proposé
     */
    public List<Personne> getPropositionAmi(){
        return this.propositionAmi;
    }

    public List<Adresse> getAdresses() {
        return adresses;
    }

    public List<CentreInteret> getCentreInterets() {
        return centreInterets;
    }

    public List<Parcours> getParcours() {
        return parcours;
    }



    @Override
    public int hashCode(){
        //id unique donc code unique
        return this.idPersonne;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        Personne other = (Personne) obj;
        //on ne test que les id car ils sont unique
        return this.idPersonne == other.idPersonne;
    }

    public int compareTo(Personne o) {
        if(this.idPersonne < o.idPersonne){
            return -1;
        }else if(this.idPersonne > o.idPersonne){
            return 1;
        }else{
            return 0;
        }
    }
   
}
